package com.easypreview.preview.service.channel;

import java.util.List;
import java.util.Map;

import com.easypreview.preview.util.page.Page;
import com.easypreview.preview.domain.channel.Channel;

/**
 * 频道接口
 * 
 * @author ajian
 * 
 */
public interface ChannelService {

	/**
	 * 根据频道id取得相应频道
	 * 
	 * @param id
	 * @return Channel
	 * @see com.easypreview.preview.domain.channel.Channel
	 */
	Channel get(String id);

	/**
	 * 根据频道路径取得相应频道
	 * 
	 * @param path
	 * @return Channel
	 * @see com.easypreview.preview.domain.channel.Channel
	 */
	Channel queryUniqueByPath(String path);

	/**
	 * 根据频道名取得相应频道
	 * 
	 * @param name
	 * @return Channel
	 * @see com.easypreview.preview.domain.channel.Channel
	 */
	Channel queryUniqueByName(String name);

	/**
	 * 返回所有频道 分页形式
	 * 
	 * @param page
	 * @return
	 */
	Page<Channel> queryPage(Page<Channel> page);

	/**
	 * 返回一级频道，List形式
	 * 
	 * @return
	 */
	List<Channel> queryTop();

	/**
	 * 返回一级频道，分页形式
	 * 
	 * @return
	 */
	Page<Channel> queryPageTop(Page<Channel> page);

	/**
	 * 保存频道
	 * 
	 * @param channel
	 */
	void save(Channel channel);

	/**
	 * 根据频道id删除频道
	 * 
	 * @param id
	 */
	void delete(String id);

	/**
	 * 更新（编辑）频道
	 * 
	 * @param channel
	 */
	void update(Channel channel);

	/**
	 * 
	 * @param title
	 * @return
	 */
	Channel getMostSimilar(String title);

	/**
	 * 
	 * @param object
	 * @return
	 */
	List<Channel> query(Object object);

	/**
	 * 
	 * @param channel
	 * @return
	 */
	List<String> hotKeyWord(Channel channel);

	/**
	 * 根据id查子频道（只返回第一层）分页形式
	 * 
	 * @param id
	 * @return
	 */
	Page<Channel> queryPageChildById(Page<Channel> page, String id);

	/**
	 * 根据id查子频道（只返回第一层）List形式
	 * 
	 * @param page
	 * @param id
	 * @return
	 */
	List<Channel> queryChildById(String id);

	/**
	 * 根据fahterId查询父频道
	 * 
	 * @param fatherId
	 * @return
	 */
	Channel getFatherByFatherId(String fatherId);

	/**
	 * 返回所有频道 List形式
	 * 
	 * @return
	 */
	List<Channel> queryChannels();

	/**
	 * @return params
	 */
	Map<String, String> classfiyToChannelname();

}
